package collection;

import java.util.*;

public class SortListDemo2 {
    public static void main(String[] args) {
        List<Point> list=new ArrayList<>();
        list.add(new Point(1,2));
        list.add(new Point(6,7));
        list.add(new Point(5,1));
        list.add(new Point(78,99));
        list.add(new Point(8,43));
        System.out.println(list);
        /*
        编译不通过的原因：
        sort方法要求元素必须实现Comparble接口
        不推荐point去实现该接口，原因是这样做对我们的代码产生了入侵性
        侵入性：
        当我们使用某个API的方法，该方法要求我们为其实现接口，继承类并重写等操作（就是我们要额外修改其他地方的代码 ）
        侵入性是不利用后期代码的维护的，应当尽量避免
         */
        //Collections.sort(list);编译不通过
        //为point定义一个比较规则，点到远点长的大/*
//        Comparator<Point> c=new Comparator<Point>() {
//            public int compare(Point o1, Point o2) {
//                //计算o1和o2点到原点的距离（忽略开方，因为是求谁更长，不是求精确长度）
//                int len1=o1.getX()*o1.getX()+o1.getY()*o1.getY();
//                int len2=o2.getX()*o2.getX()+o2.getY()*o2.getY();
//                /*
//                推导过程：
//                返回值表示o1和o2的大小关系有三种情况
//                o1>o2--返回一个正值
//                o1<o2--返回一个负值
//                o1=o2--返回0
//                 */
//                return len1-len2;
//            }
//        };

        /*
        重载sort方法会根据我们传入的比较list集合元素俩俩比较，
        然后根据大小关系进行从小到大排序
         */
        //Collections.sort(list,c);
        Collections.sort(list,new Comparator<Point>() {//把比较器直接换成第二个参数
            public int compare(Point o1, Point o2) {
                int len1 = o1.getX() * o1.getX() + o1.getY() * o1.getY();
                int len2 = o2.getX() * o2.getX() + o2.getY() * o2.getY();
                return len1-len2;
            }
        });
        System.out.println(list);
    }
}
